home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / programr / progwin.zip / NOPOPUPS.ZIP / NOPOPUPS.C < prev    next >
C/C++ Source or Header  |  1991-10-30  |  3KB  |  104 lines

  1. /*------------------------------------------------
  2.   NOPOPUPS.C -- Demonstrates No-Popup Nested Menu
  3.         (c) Charles Petzold, 1990
  4.   -----------------------------------------------*/
  5.  
  6. #include <windows.h>
  7. #include "nopopups.h"
  8.  
  9. long FAR PASCAL WndProc (HWND, WORD, WORD, LONG);
  10.  
  11. int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance,
  12.               LPSTR lpszCmdParam, int nCmdShow)
  13.      {
  14.     static char szAppName [] = "NoPopUps";
  15.     HWND        hwnd;
  16.     MSG        msg;
  17.     WNDCLASS    wndclass;
  18.  
  19.     if (!hPrevInstance)
  20.         {
  21.         wndclass.style            = CS_HREDRAW | CS_VREDRAW;
  22.         wndclass.lpfnWndProc        = WndProc;
  23.         wndclass.cbClsExtra        = 0;
  24.         wndclass.cbWndExtra        = 0;
  25.         wndclass.hInstance        = hInstance;
  26.         wndclass.hIcon            = LoadIcon (NULL, IDI_APPLICATION);
  27.         wndclass.hCursor            = LoadCursor (NULL, IDC_ARROW);
  28.         wndclass.hbrBackground        = GetStockObject (WHITE_BRUSH);
  29.         wndclass.lpszMenuName        = NULL;
  30.         wndclass.lpszClassName        = szAppName;
  31.  
  32.         RegisterClass (&wndclass);
  33.         }
  34.  
  35.     hwnd = CreateWindow (szAppName,  "No-Popup Nested Menu Demonstration",
  36.             WS_OVERLAPPEDWINDOW,
  37.             CW_USEDEFAULT,  CW_USEDEFAULT,
  38.             CW_USEDEFAULT,  CW_USEDEFAULT,
  39.             NULL,     NULL,  hInstance, NULL);
  40.  
  41.     ShowWindow (hwnd, nCmdShow);
  42.     UpdateWindow (hwnd);
  43.  
  44.     while (GetMessage (&msg, NULL, 0, 0))
  45.         {
  46.         TranslateMessage (&msg);
  47.         DispatchMessage (&msg);
  48.         }
  49.     return msg.wParam;
  50.      }
  51.  
  52. long FAR PASCAL WndProc (HWND hwnd, WORD message, WORD wParam, LONG lParam)
  53.      {
  54.      static HMENU hMenuMain, hMenuEdit, hMenuFile;
  55.      HANDLE        hInstance;
  56.  
  57.      switch (message)
  58.         {
  59.         case WM_CREATE:
  60.            hInstance = GetWindowWord (hwnd, GWW_HINSTANCE);
  61.  
  62.            hMenuMain = LoadMenu (hInstance, "MenuMain");
  63.            hMenuFile = LoadMenu (hInstance, "MenuFile");
  64.            hMenuEdit = LoadMenu (hInstance, "MenuEdit");
  65.  
  66.                SetMenu (hwnd, hMenuMain);
  67.            return 0;
  68.  
  69.         case WM_COMMAND:
  70.            switch (wParam)
  71.               {
  72.               case IDM_MAIN:
  73.                  SetMenu (hwnd, hMenuMain);
  74.                  return 0;
  75.  
  76.               case IDM_FILE:
  77.                  SetMenu (hwnd, hMenuFile);
  78.                  return 0;
  79.  
  80.               case IDM_EDIT:
  81.                  SetMenu (hwnd, hMenuEdit);
  82.                  return 0;
  83.  
  84.               case IDM_NEW:
  85.               case IDM_OPEN:
  86.               case IDM_SAVE:
  87.               case IDM_SAVEAS:
  88.               case IDM_UNDO:
  89.               case IDM_CUT:
  90.               case IDM_COPY:
  91.               case IDM_PASTE:
  92.               case IDM_CLEAR:
  93.                  MessageBeep (0);
  94.                  return 0;
  95.               }
  96.            break;
  97.  
  98.         case WM_DESTROY:
  99.            PostQuitMessage (0);
  100.            return 0;
  101.         }
  102.      return DefWindowProc (hwnd, message, wParam, lParam);
  103.      }
  104.